﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _2_11
{
    public partial class Form1 : Form
    {
        int[] num; // 存储所有随机数
        List<int> prime = new List<int>(); // 存储素数
        public Form1()
        {
            InitializeComponent();
        }
        private bool IsPrime(int n)
        {
            // 素数定义：大于1的整数，除1和自身外无其他约数
            if (n <= 1) return false;  // 1及以下非素数
            if (n == 2) return true;   // 2是唯一偶素数
            if (n % 2 == 0) return false;  // 偶数（除2外）非素数

            // 双循环判断：只需遍历到根号n，减少计算量（实验2-11“编程提示”核心）
            for (int i = 3; i <= Math.Sqrt(n); i += 2)
            {
                if (n % i == 0) return false;  // 存在其他约数，非素数
            }
            return true;  // 无其他约数，是素数
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int n = int.Parse(textBox1.Text);
                int min = int.Parse(textBox2.Text);
                int max = int.Parse(textBox3.Text);
                num = new int[n];
                prime.Clear();
                Random rnd = new Random();

                // 生成随机数并筛选素数
                for (int i = 0; i < n; i++)
                {
                    num[i] = rnd.Next(min, max + 1);
                    if (IsPrime(num[i]))
                    {
                        prime.Add(num[i]);
                    }
                }

                // 显示所有随机数
                textBox4.Text = string.Join(" ", num);
                button2.Enabled = true; // 启用素数按钮
                textBox5.Clear(); // 清空之前的素数结果
            }
            catch (FormatException)
            {
                MessageBox.Show("请输入有效整数！");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox5.Text = string.Join(" ", prime);
        }
    }
}
